<?php
//发布微博的处理方法
require 'lib.php';

//1.判断是否登录,未登录的跳到主页
if( !($user = isLogin()) ) {
    header('Location: index.php');exit(0);
}

//2.接收post数据
$content = P('status');

if($content) {
    //3.插入数据
    $redis = redis_conn();

    //3.1生成自增的主键id
    $postid = $redis->incr('global:postid');

    if(!$postid) {
        error('数据出错，请稍后重试');
    }else {
        // V1.0 微博博文设计为string类型
        /*$rs1 = $redis->set('post:postid:'.$postid.':time', time());
        $rs2 = $redis->set('post:postid:'.$postid.':userid', $user['userid']);
        $rs3 = $redis->set('post:postid:'.$postid.':content', $content);
        if(!$rs1 || !$rs2 || !$rs3) {
            error('数据出错，请稍后重试');
        }*/
        // V1.1 ① 发布为hash类型存储
        $data = ['userid' => $user['userid'], 'username' => $user['username'], 'time' => time(), 'content' => $content];
        $rs = $redis->hMset('post:postid:'.$postid, $data);
        if (!$rs) {
            error('微博发布失败，请稍后重试!');
        }
    }
    /*//4.v1.0推送消息给粉丝 -- 链表
    //4.1 查询ta的粉丝列表,遍历数组插入到各自的链表中
    $l_users = $redis->sMembers('fans:userid:'.$user['userid']); //sadd('fans:userid:1', 2); //我的粉丝列表
    $l_users[] = $user['userid'];

    //v1.0 推送消息给粉丝 start
    $flag = 1;
    foreach ( $l_users as $lu) {
        $rs = $redis->lPush('spost:userid:'.$lu, $postid);
        if ( !$rs ) $flag = 0;
    }
    if( !$flag ) {
        error('数据出错，请稍后重试');
    }
    //v1.0 推送消息给粉丝 end */

    /* v1.1 拉取消息 start */
    //v1.1 ② 排序某人发布的微博列表 截取20个热数据 -- 有序集合存储
    $pull_rs = $redis->zAdd('pull:userid:'.$user['userid'], $postid, $postid); //$redis->zAdd('key', 1, 'val1'); 键，权重，值
    if( !$pull_rs ) {
        error('数据出错，请稍后重试');
    }
    // 判断pull的数据是否大于20条了
    if( $redis->zCard('pull:userid:'.$user['userid']) > 20 ) {
        $rs = $redis->zRemRangeByRank('pull:userid:'.$user['userid'], 0, 0); //删除第一个元素
        if (!$rs) {
            error('微博发布失败，请稍后重试!');
        }
    }
    /* v1.1 拉取消息 end */
    // 9.冷数据写入global：store中的操作
    $redis->lPush('mypost:userid:'.$user['userid'], $postid);
    if ( $redis->lLen('mypost:userid:'.$user['userid']) > 10 ) {
        $redis->rpoplpush('mypost:userid:'.$user['userid'], 'global:store'); //将列表中的最后一个元素(尾元素)弹出到新列表中，并返回给客户端。
    }
}

header('Location: home.php');exit(0); //发布成功后跳转

?>